/**   
 * @Title: MoneyFormatTemplate.java 
 * @Package cn.com.gome.frame.template 
 * @Description: 金额格式化模板  
 * @author chenmin-ds   
 * @date 2015年2月27日 下午3:11:46 
 * @company cn.com.gome
 * @version V1.0   
 */

package com.gomeplus.frame.template;

import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateModelException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.List;

/**
 * @ClassName: MoneyFormatTemplate
 * @Description: 金额格式化模板
 * @author chenmin-ds
 * @date 2015年2月27日 下午3:11:46
 */
public class MoneyFormatTemplate implements TemplateMethodModel {

	private Logger logger = LoggerFactory.getLogger("MoneyFormatTemplate");
	
	/**
	 * @param arguments .get(0) 要格式化的字段值
	 * @param arguments .get(1) 转换格式
	 * @param arguments .get(2) 转换类型
	 * @param arguments .get(3) 格式化失败的默认值 （可选） 转换格式： 无小数位：# 两位小数：#.00 带千分位的两位小数：###,###.00 转换类型： 元转分:y2f 分转元：f2y
	 */
	@Override
    @SuppressWarnings("rawtypes")
	public Object exec(List arguments) throws TemplateModelException {

		String defaultStr = "";
		try {
			if (arguments.size() > 3 && null != arguments.get(3)) {
				defaultStr = (String) arguments.get(3);
			}

			String value = (String) arguments.get(0);
			value = arguments.get(0).toString().replace(",", "");
			String formatType = (String) arguments.get(2);
			String formatStyle = (String) arguments.get(1);
			
			DecimalFormat df = new DecimalFormat();
			BigDecimal baseNum = new BigDecimal(100);
			BigDecimal bg = new BigDecimal(value);
			if ("f2y".equals(formatType)) {
				bg = bg.divide(baseNum);
			} else if ("y2f".equals(formatType)) {
				bg = bg.multiply(baseNum);
			}
			df.applyPattern(formatStyle);
			return df.format(bg);
		} catch (Exception e) {
			logger.error("金额格式化模板，格式化金额异常：{}", e.getMessage());
		}
		return defaultStr;
	}

}
